﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Globalization;

namespace ErickOrlando.Utilidades.Data
{
    /// <summary>
    /// Contiene funciones estáticas para manejar Fechas y Horas
    /// </summary>
    /// <remarks>Erick Orlando © 2012</remarks>
    public static class FechaHora
    {

        /// <summary>
        /// Permite convertir un valor de Fecha en un Entero
        /// </summary>
        /// <param name="Fecha">Valor de FechaHora</param>
        /// <returns>Un entero con el formato YYMMDD</returns>
        public static int FormatoDate(this DateTime Fecha)
        {
            string Año = Fecha.Year.ToString();
            string Mes = Fecha.Month.ToString("0#");
            string Dia = Fecha.Day.ToString("0#");

            return int.Parse(string.Concat(Año, Mes, Dia));
        }

        /// <summary>
        /// Permite convertir un valor de Hora en un Entero
        /// </summary>
        /// <param name="Dato">Valor de FechaHora</param>
        /// <returns>Un entero con el formato HHMMSS (Formato 24h)</returns>
        public static int FormatoTime(this DateTime Dato)
        {
            string Hora = Dato.Hour.ToString("0#");
            string Minuto = Dato.Minute.ToString("0#");
            string Segundo = Dato.Second.ToString("0#");

            return int.Parse(string.Concat(Hora, Minuto, Segundo));
        }

        /// <summary>
        /// Convierte un valor de Fecha representado como entero a un DateTime
        /// </summary>
        /// <param name="Fecha">Entero que contiene la Fecha</param>
        /// <returns>Devuelve un DateTime que contiene la Fecha</returns>
        public static DateTime FormatoDate(this int Fecha)
        {
            var Valor = Fecha.ToString();
            var Año = Valor.Substring(0, 4);
            var Mes = Valor.Substring(4, 2);
            var Dia = Valor.Substring(6, 2);

            var FormatoFecha = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

            if (FormatoFecha == "dd/MM/yyyy")
                Valor = string.Concat(Dia, "/", Mes, "/", Año);
            else
                Valor = string.Concat(Mes, "/", Dia, "/", Año);

            return Convert.ToDateTime(Valor);
        }

        /// <summary>
        /// Convierte un valor de Hora representada como Entero a un valor String
        /// </summary>
        /// <param name="Dato">Entero que contiene la Hora</param>
        /// <returns>Un String que contiene la Hora</returns>
        public static String FormatoTime(this int Dato)
        {
            var Valor = Dato.ToString();
            //Primero comprobamos la longitud de la cadena
            //debido a que al ser un campo Integer los ceros
            //desaparecen del lado izquierdo 

            switch (Valor.Length)
            {
                case 1:
                    Valor = string.Format("00000{0}", Valor);
                    break;
                case 2:
                    Valor = string.Format("0000{0}", Valor);
                    break;
                case 3:
                    Valor = string.Format("000{0}", Valor);
                    break;
                case 4:
                    Valor = string.Format("00{0}", Valor);
                    break;
                case 5:
                    Valor = string.Format("0{0}", Valor);
                    break;
            }

            var Hora = Valor.Substring(0, 2);
            var Minuto = Valor.Substring(2, 2);
            var Segundo = Valor.Substring(4, 2);

            return string.Concat(Hora, ":", Minuto, ":", Segundo);
        }
    }
}
